"""
新的数据库初始化脚本，使用模块化模型结构
"""
import os
import sys
import random
from datetime import datetime, timedelta, date

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from app import create_app
from app.models import (
    db, User, Project, ProjectTask, ProjectMilestone,
    Customer, Contact, Lead
)

def init_database():
    """初始化数据库"""
    app = create_app('development')
    
    with app.app_context():
        # 创建所有表
        db.create_all()
        print("数据库表创建完成")
        
        # 初始化基础数据
        init_admin_user()
        init_users()  # 添加更多用户
        init_customers()  # 添加更多客户
        init_projects()  # 添加更多项目
        init_leads()  # 添加线索数据
        
        print("数据库初始化完成")



def init_admin_user():
    """初始化管理员用户"""
    admin = User.query.filter_by(username='admin').first()
    if not admin:
        admin = User(
            username='admin',
            name='系统管理员',
            email='admin@example.com',
            role='admin'
        )
        admin.set_password('admin123')
        db.session.add(admin)
        db.session.commit()
        print("管理员用户创建完成")

def init_users():
    """初始化更多用户"""
    # 获取管理员用户
    admin = User.query.filter_by(username='admin').first()
    
    # 创建不同角色的用户
    users_data = [
        {
            'username': 'project_manager',
            'name': '项目经理',
            'email': 'pm@example.com',
            'role': 'project_manager',
            'password': 'pm123'
        },
        {
            'username': 'sales_manager',
            'name': '销售经理',
            'email': 'sm@example.com',
            'role': 'sales_manager',
            'password': 'sm123'
        },
        {
            'username': 'developer1',
            'name': '开发工程师1',
            'email': 'dev1@example.com',
            'role': 'developer',
            'password': 'dev123'
        },
        {
            'username': 'developer2',
            'name': '开发工程师2',
            'email': 'dev2@example.com',
            'role': 'developer',
            'password': 'dev123'
        },
        {
            'username': 'sales1',
            'name': '销售专员1',
            'email': 'sales1@example.com',
            'role': 'sales',
            'password': 'sales123'
        },
        {
            'username': 'sales2',
            'name': '销售专员2',
            'email': 'sales2@example.com',
            'role': 'sales',
            'password': 'sales123'
        }
    ]
    
    for user_data in users_data:
        user = User.query.filter_by(username=user_data['username']).first()
        if not user:
            user = User(
                username=user_data['username'],
                name=user_data['name'],
                email=user_data['email'],
                role=user_data['role']
            )
            user.set_password(user_data['password'])
            db.session.add(user)
    
    db.session.commit()
    print("用户数据初始化完成")

def init_customers():
    """初始化更多客户数据"""
    # 客户数据
    customers_data = [
        {
            'name': '科技创新有限公司',
            'industry': '信息技术',
            'scale': '大型企业',
            'source': '展会',
            'status': '成交客户',
            'description': '专注于人工智能和大数据技术的创新公司',
            'address': '北京市海淀区中关村科技园',
            'phone': '010-88888888',
            'email': 'contact@techinnov.com',
            'website': 'https://www.techinnov.com'
        },
        {
            'name': '金融服务集团',
            'industry': '金融',
            'scale': '大型企业',
            'source': '推荐',
            'status': '意向客户',
            'description': '提供全方位金融服务的集团公司',
            'address': '上海市浦东新区陆家嘴金融中心',
            'phone': '021-66666666',
            'email': 'info@finserv.com',
            'website': 'https://www.finserv.com'
        },
        {
            'name': '智能制造企业',
            'industry': '制造业',
            'scale': '中型企业',
            'source': '网络推广',
            'status': '潜在客户',
            'description': '专注于智能制造和工业自动化的企业',
            'address': '深圳市南山区高新技术产业园',
            'phone': '0755-77777777',
            'email': 'contact@smartmanu.com',
            'website': 'https://www.smartmanu.com'
        },
        {
            'name': '医疗健康科技',
            'industry': '医疗健康',
            'scale': '中型企业',
            'source': '电话营销',
            'status': '活跃',
            'description': '专注于医疗信息化和健康管理的技术公司',
            'address': '广州市天河区珠江新城',
            'phone': '020-55555555',
            'email': 'info@medtech.com',
            'website': 'https://www.medtech.com'
        },
        {
            'name': '教育培训机构',
            'industry': '教育',
            'scale': '小型企业',
            'source': '客户介绍',
            'status': '休眠',
            'description': '提供在线教育和职业培训的机构',
            'address': '成都市高新区天府软件园',
            'phone': '028-44444444',
            'email': 'contact@edutech.com',
            'website': 'https://www.edutech.com'
        }
    ]
    
    # 获取销售经理和销售专员
    sales_manager = User.query.filter_by(username='sales_manager').first()
    sales1 = User.query.filter_by(username='sales1').first()
    sales2 = User.query.filter_by(username='sales2').first()
    
    for i, customer_data in enumerate(customers_data):
        customer = Customer.query.filter_by(name=customer_data['name']).first()
        if not customer:
            # 分配负责人
            if i == 0 or i == 1:
                manager_id = sales_manager.id if sales_manager else None
            elif i == 2 or i == 3:
                manager_id = sales1.id if sales1 else None
            else:
                manager_id = sales2.id if sales2 else None
                
            customer = Customer(
                name=customer_data['name'],
                industry=customer_data['industry'],
                scale=customer_data['scale'],
                source=customer_data['source'],
                status=customer_data['status'],
                description=customer_data['description'],
                address=customer_data['address'],
                phone=customer_data['phone'],
                email=customer_data['email'],
                website=customer_data['website'],
                manager_id=manager_id
            )
            db.session.add(customer)
            db.session.flush()  # 获取ID
            
            # 为每个客户创建多个联系人
            contacts_data = [
                {
                    'name': f'联系人{i*2+1}',
                    'position': '技术总监' if i % 2 == 0 else '采购经理',
                    'phone': f'138{str(10000000 + i*11):0>8}',
                    'email': f'contact{i*2+1}@{customer_data["name"].replace(" ", "").replace("有限公司", "").lower()}.com',
                    'is_primary': True
                },
                {
                    'name': f'联系人{i*2+2}',
                    'position': '项目经理' if i % 2 == 0 else '财务总监',
                    'phone': f'139{str(10000000 + i*11 + 1):0>8}',
                    'email': f'contact{i*2+2}@{customer_data["name"].replace(" ", "").replace("有限公司", "").lower()}.com',
                    'is_primary': False
                }
            ]
            
            for contact_data in contacts_data:
                contact = Contact(
                    customer_id=customer.id,
                    name=contact_data['name'],
                    position=contact_data['position'],
                    phone=contact_data['phone'],
                    email=contact_data['email'],
                    is_primary=contact_data['is_primary']
                )
                db.session.add(contact)
    
    db.session.commit()
    print("客户数据初始化完成")

def init_projects():
    """初始化更多项目数据"""
    # 项目数据
    projects_data = [
        {
            'name': '企业ERP系统升级',
            'description': '为科技创新有限公司升级现有ERP系统，提高业务流程效率',
            'status': '进行中',
            'priority': '高',
            'progress': 65
        },
        {
            'name': '金融数据分析平台',
            'description': '为金融服务集团构建金融数据分析平台，支持实时数据处理',
            'status': '规划中',
            'priority': '高',
            'progress': 15
        },
        {
            'name': '智能制造生产线改造',
            'description': '为智能制造企业进行生产线智能化改造，提高生产效率',
            'status': '已完成',
            'priority': '中',
            'progress': 100
        },
        {
            'name': '医疗健康管理系统',
            'description': '为医疗健康科技开发综合健康管理系统，整合多种健康数据',
            'status': '进行中',
            'priority': '中',
            'progress': 40
        },
        {
            'name': '在线教育平台开发',
            'description': '为教育培训机构开发在线教育平台，支持多种教学模式',
            'status': '延期',
            'priority': '低',
            'progress': 25
        }
    ]
    
    # 获取项目经理和开发人员
    project_manager = User.query.filter_by(username='project_manager').first()
    developer1 = User.query.filter_by(username='developer1').first()
    developer2 = User.query.filter_by(username='developer2').first()
    
    # 获取客户
    customers = Customer.query.all()
    
    for i, project_data in enumerate(projects_data):
        project = Project.query.filter_by(name=project_data['name']).first()
        if not project:
            # 设置项目日期
            base_date = datetime.now().date()
            start_date = base_date - timedelta(days=random.randint(30, 90))
            end_date = start_date + timedelta(days=random.randint(60, 180))
            
            # 分配项目经理
            manager_id = project_manager.id if project_manager else None
            
            project = Project(
                name=project_data['name'],
                description=project_data['description'],
                start_date=start_date,
                end_date=end_date,
                status=project_data['status'],
                priority=project_data['priority'],
                progress=project_data['progress'],
                manager_id=manager_id,
                customer_id=customers[i].id if i < len(customers) else None
            )
            db.session.add(project)
            db.session.flush()  # 获取ID
            
            # 为每个项目创建多个任务
            tasks_count = random.randint(3, 6)
            for j in range(tasks_count):
                task_status = random.choice(['未开始', '进行中', '已完成', '已延期'])
                task_priority = random.choice(['低', '中', '高'])
                task_progress = 0
                if task_status == '已完成':
                    task_progress = 100
                elif task_status == '进行中':
                    task_progress = random.randint(20, 80)
                
                # 设置任务日期
                task_start_date = start_date + timedelta(days=j * 10)
                task_end_date = task_start_date + timedelta(days(random.randint(5, 15)))
                
                # 分配任务负责人
                assignee_id = developer1.id if j % 2 == 0 else developer2.id
                
                task = ProjectTask(
                    project_id=project.id,
                    name=f'{project_data["name"]} - 任务{j+1}',
                    description=f'这是{project_data["name"]}的第{j+1}个任务',
                    start_date=task_start_date,
                    end_date=task_end_date,
                    status=task_status,
                    priority=task_priority,
                    progress=task_progress,
                    assignee_id=assignee_id
                )
                db.session.add(task)
            
            # 为每个项目创建里程碑
            milestones_count = random.randint(2, 4)
            for j in range(milestones_count):
                milestone_status = '未完成' if j > 0 else '已完成'  # 第一个里程碑设为已完成
                milestone_date = start_date + timedelta(days=(j+1) * 20)
                
                milestone = ProjectMilestone(
                    project_id=project.id,
                    name=f'{project_data["name"]} - 里程碑{j+1}',
                    description=f'这是{project_data["name"]}的第{j+1}个里程碑',
                    due_date=milestone_date,
                    status=milestone_status
                )
                db.session.add(milestone)
    
    db.session.commit()
    print("项目数据初始化完成")



def init_leads():
    """初始化线索数据"""
    # 获取销售专员
    sales1 = User.query.filter_by(username='sales1').first()
    sales2 = User.query.filter_by(username='sales2').first()
    
    # 线索数据
    leads_data = [
        {
            'name': '张总',
            'company': '新兴科技创业公司',
            'position': 'CEO',
            'phone': '13800138001',
            'email': 'zhang@newtech.com',
            'source': '展会',
            'status': '新线索',
            'description': '在科技展会上认识的创业公司CEO，对我们的产品很感兴趣',
            'budget': 200000.0,
            'timeline': '3个月内',
            'assignee_id': sales1.id if sales1 else None
        },
        {
            'name': '李经理',
            'company': '传统制造企业',
            'position': '生产总监',
            'phone': '13900139001',
            'email': 'li@traditionalmanu.com',
            'source': '电话营销',
            'status': '跟进中',
            'description': '通过电话营销获得的线索，正在考虑生产线升级',
            'budget': 350000.0,
            'timeline': '6个月内',
            'assignee_id': sales2.id if sales2 else None
        },
        {
            'name': '王主任',
            'company': '政府机构',
            'position': '信息中心主任',
            'phone': '13700137001',
            'email': 'wang@govagency.gov',
            'source': '推荐',
            'status': '已转化',
            'description': '通过现有客户推荐的政府机构线索，已转化为商机',
            'budget': 800000.0,
            'timeline': '1年内',
            'assignee_id': sales1.id if sales1 else None
        },
        {
            'name': '赵总监',
            'company': '零售连锁企业',
            'position': 'IT总监',
            'phone': '13600136001',
            'email': 'zhao@retailchain.com',
            'source': '网络推广',
            'status': '无效线索',
            'description': '通过网络推广获得的线索，但预算不足，暂无合作可能',
            'budget': 50000.0,
            'timeline': '不确定',
            'assignee_id': sales2.id if sales2 else None
        },
        {
            'name': '刘经理',
            'company': '物流公司',
            'position': '运营经理',
            'phone': '13500135001',
            'email': 'liu@logistics.com',
            'source': '客户介绍',
            'status': '待跟进',
            'description': '现有客户介绍的物流公司线索，需要进一步跟进',
            'budget': 150000.0,
            'timeline': '3个月内',
            'assignee_id': sales1.id if sales1 else None
        }
    ]
    
    for lead_data in leads_data:
        lead = Lead.query.filter_by(email=lead_data['email']).first()
        if not lead:
            lead = Lead(
                name=lead_data['name'],
                company=lead_data['company'],
                position=lead_data['position'],
                phone=lead_data['phone'],
                email=lead_data['email'],
                source=lead_data['source'],
                status=lead_data['status'],
                description=lead_data['description'],
                budget=lead_data['budget'],
                timeline=lead_data['timeline'],
                assignee_id=lead_data['assignee_id']
            )
            db.session.add(lead)
    
    db.session.commit()
    print("线索数据初始化完成")

if __name__ == '__main__':
    init_database()